#include "wm_gpio.h"
#include "wm_gpio_afsel.h"	
#include "wm_hostspi.h"
#include "stdio.h"
#define uchar unsigned char		   
#define uint unsigned int		 

//uchar code CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  //共阴数码管0~9字型码
//uchar code TAB[]  =  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};  //共阴数码管无显示字型码

int KEY[5]={0x06,0x3f};		 				

int temperature =30;  // 初始温度为30°
int powerstate = 0;  // 初始开关状态为关
int heaterPower =2;  // 初始为高档
//
//void send_8bit(uchar dat)	 //发送8位数据,从低位开始+
//{
//  uchar i;
//  for(i=0;i<8;i++)
//  {	
//  	  tls_gpio_write(WM_IO_PB_10,0); 
//    if(dat&1) 
//	    tls_gpio_write(WM_IO_PB_09,1); /*输出高电平*/ 
//	else         
//	    tls_gpio_write(WM_IO_PB_09,0); 
//     // 延时三条指令的时间
//	tls_gpio_write(WM_IO_PB_10,1); /*输出高电平*/ 
//	dat>>=1;	 
//  }
//   tls_gpio_write(WM_IO_PB_10,0); 
//   tls_gpio_write(WM_IO_PB_09,0); 
//}
//

//void send_command(uchar com)  //发送命令字节
//{
//tls_gpio_write(WM_IO_PB_11,1);  //STB置高
//// 延时6个指令的时间
//tls_gpio_write(WM_IO_PB_11,0); 				  //STB置低
// send_8bit(com);			          //发送8bit数据
//}


void send_command(uchar com){
	tls_spi_write(com,1);
}

void read_key(void)			   
{
 unsigned char i,j; 
 send_command(0x42);		          //发送读按键命令
 for(j=0;j<5;j++)			  //连续读取5个字节
 {
  for(i=0;i<8;i++)
 {
 tls_gpio_write(WM_IO_PB_10,0); 
  KEY[j]=KEY[j]>>1;
 tls_gpio_write(WM_IO_PB_10,1); 
  if(tls_gpio_read(WM_IO_PB_09)==1)     
  {
    KEY[j]=KEY[j]|0x80;
  }
 tls_os_time_delay(0.006);
} 
 tls_os_time_delay(0.006);
 tls_os_time_delay(0.006);
}
  tls_gpio_write(WM_IO_PB_10,0);
  tls_gpio_write(WM_IO_PB_09,0); 
  tls_gpio_write(WM_IO_PB_11,1);  //STB置高
} 

void read_key1(void)			   //读取5字节按键值并存入数组KEY[],从低字节、低位开始
{
 unsigned char i,j; 
 send_command(0x42);		          //发送读按键命令
 for(j=0;j<2;j++)			  //连续读取2个字节
 {
 tls_spi_read(KEY[j],1);       // 缓冲区key[]
//   KEY[j]=KEY[j]|0x80;
   
}
}


void display(uchar p)   //显示函数，1~7位数码管显示0~6
{
 uchar i;
 //  地址自动加一模式
 send_command(0x03); 	//设置显示模式，7位10段模式
 send_command(0x40);	//设置数据命令，采用     地址自动加1模式
 send_command(0xc0);	//设置显示地址，从00H开始

 while(1)
  {
   tls_spi_write(p,1);	    //从00H开始,偶数地址送显示数据
   tls_spi_write(0x00,1);	    //因为SEG9-14未用到，所以奇数地址送全0
 //  p++;
   }
  send_command(0x8F);	    //设置显示控制命令，打开显示并设置占空比14/16.
}
	

void key_process()		// 按键处理函数
{
    if(KEY[0]!=0x00)
   { 
    if((KEY[0] == 0x01) && (powerstate == 0)) //K1与KS1按键按下   做 开/关机按键使用
     { 
        powerstate=1;
        display(0x3F);
    } 
     if((KEY[0] == 0x01) && (powerstate == 1)) //K1与KS1按键按下   做 开/关机按键使用
     { 
        powerstate=0;
        display(0x00);
    } 
    if((KEY[0]==0x02)) {}  // K2与KS1按键按下   定时预约按键
    if((KEY[0]==0x08))  //K1与KS2按键按下   + 键
    {
       temperature++;  // 温度的控制
    }
    if((KEY[0]==0x10)) //K1与KS2按键按下   — 键
    {
       temperature--;  //温度的控制
    }  
   }
    if(KEY[1]!=0x00)
   { 
    if((KEY[2] == 0x01)) {    }     //K1与KS3按键按下   加湿按钮使用
    if((KEY[2] == 0x02)&& (heaterPower == 2))   //K2与KS3按键按下   调档按键
     {
        heaterPower =1;
        // 低档位调节函数 led与温度的控制
     } 
     if((KEY[2] == 0x02)&& (heaterPower == 1))   //K2与KS3按键按下   调档按键
     {
        heaterPower =2;
        // 高档位调节函数  led与温度的控制
     } 
   }
}



void tm1668_test_task(){ 
	display(0x00);
	tls_os_time_delay(100);
	while(1)
	    {
	read_key1();	   //读按键值
	key_process();	   //按键处理
   tls_os_time_delay(200);
	
       
		}
}
